GoloScript v0.0.0 is out!

We are excited to announce the release of GoloScript v0.0.0, the latest version of our dynamic scripting language designed for simplicity and performance. This release brings a host of new features, improvements, and bug fixes that enhance the overall developer experience.

Of course, we have a 🐳 Docker image available for this release:

  1. Create a file named hello.golo with the following content:
module hello.World

function main = |args| {
  println("πŸ‘‹ Hello World! 🌍")
}
  1. Run the GoloScript Docker image with the following command:
docker run --rm -v $(pwd):/app -w /app k33g/gololang:v0.0.0 /golo ./hello.golo

GoloScript Playground

If you want to try GoloScript without installing anything, you can use the GoloScript Playgroung available at: https://codeberg.org/TypeUnsafe/golo-playground. It’s a Docker Compode project that allows you to write, run GoloScript code snippets in a container, with some samples included.

We have a VSCode grammar!

The grammar is not yet published, but you can find it in the GoloScript repository: https://codeberg.org/TypeUnsafe/golo-script/src/branch/main/vscode.

GoloScript is hosted on πŸ”οΈ Codeberg

GoloScript is now hosted on Codeberg, a community-driven platform for hosting and collaborating on open-source projects. You can find the GoloScript repository at: https://codeberg.org/TypeUnsafe/golo-script

We encourage developers to explore the new features of GoloScript v0.0.0 and contribute to its growth. Your feedback and contributions are invaluable to us as we continue to improve the language.

Release Highlights

https://codeberg.org/TypeUnsafe/golo-script/releases/tag/v0.0.0

The newest β€œfeature” is the Observable type!

An observable value notifies observers of updates in a thread-safe manner. An observable can also be constructed from another observable using the map and filter combinators

module tests.Observable

import gololang.Testing

# Global variables to track observer notifications
var notificationCount = 0
var lastValue = null

function testObservableOnChange = {
  resetTestState()
  let obs = observable(5)

  # Register an observer
  observableOnChange(obs, |value| {
    notificationCount = notificationCount + 1
    lastValue = value
  })

  # Update the value
  observableSet(obs, 10)

  assertEqual(1, notificationCount, "Observer should be notified once")
  assertEqual(10, lastValue, "Observer should receive new value")
}

function testMultipleObservers = {
  resetTestState()
  let obs = observable(1)
  var count1 = 0
  var count2 = 0

  observableOnChange(obs, |value| {
    count1 = count1 + 1
  })

  observableOnChange(obs, |value| {
    count2 = count2 + 1
  })

  observableSet(obs, 2)

  assertEqual(1, count1, "First observer should be notified")
  assertEqual(1, count2, "Second observer should be notified")
}

function testObservableMap = {
  let source = observable(5)
  let mapped = observableMap(source, |value| {
    return value * 2
  })

  # The mapped observable should have null initially
  # until the source updates

  # Update source
  observableSet(source, 3)

  # Check mapped value
  assertEqual(6, observableGet(mapped), "Mapped observable should have value 6 (3 * 2)")
}

function testObservableFilter = {
  resetTestState()
  let source = observable(1)
  let filtered = observableFilter(source, |value| {
    return value % 2 == 0  # Only even numbers
  })

  observableOnChange(filtered, |value| {
    notificationCount = notificationCount + 1
    lastValue = value
  })

  # Set to odd number - should not propagate
  observableSet(source, 3)
  assertEqual(0, notificationCount, "Odd number should not propagate")

  # Set to even number - should propagate
  observableSet(source, 4)
  assertEqual(1, notificationCount, "Even number should propagate")
  assertEqual(4, lastValue, "Filtered value should be 4")
}

So, what are you waiting for? Try GoloScript v0.0.0 today and experience the power of dynamic scripting like never before!

πŸ€“ - The GoloScript Team

Β© 2026 GoloScript Project | Built with Gu10berg

Subscribe: πŸ“‘ RSS | βš›οΈ Atom